/**
* 版权所有：福建邮科电信业务部厦门研发中心 
*====================================================
* 文件名称: MyJdbcDao.java
* 修订记录：
* No    日期				作者(操作:具体内容)
* 1.    2013-3-13			詹保山(创建:创建文件)
*====================================================
* 类描述：(说明未实现或其它不应生成javadoc的内容)
* 
*/
package com.devframe.sysbase.dao;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.RowMapper;

import com.devframe.sys.util.page.PageInfo;

public interface BaseJdbcDao {
	
	/**
	 * 列表查询
	 * @param sql
	 * @param paramMap
	 * @return
	 * @author:詹保山
	 */
	public  List<Map<String,Object>> sqlQueryForList(String sql, Map<String, Object> paramMap) ;
	
	/**
	 * 列表查询
	 * @param sql
	 * @param paramMap
	 * @param rowMapper
	 * @return
	 * @author:詹保山
	 */
	public <T> List<T> sqlQueryForList(String sql, Map<String, ?> paramMap, RowMapper<T> rowMapper);

	/**
	 * 列表查询
	 * @param sql
	 * @param paramMap
	 * @param clazz 对应的POJO的CLASS 
	 * @return
	 * @author:詹保山
	 */
	public <T> List<T> sqlQueryForList(String sql, Map<String, ?> paramMap, Class<T> clazz);
	
	  /**
     * 单记录查询,返回字段名为主键的MAP
     * 
     * @param queryStr
     *            查询sql
     * @return Map
     */
    public Map sqlQueryForMap(String queryStr);
    
    /**
     * 单值查询
     * 
     * @param queryStr
     *            查询sql
     * @return 字符串
     */
    public String sqlQueryForValue(String queryStr) ;
    
    /**
     * 单值查询
     * 
     * @param queryStr
     *            查询sql
     * @param params
     *            查询参数
     * @return 字符串
     * 
     */
    public String sqlQueryForValue(String queryStr, Map params);
	
    /**
     * 单记录查询,返回字段名为主键的MAP
     * 
     * @param queryStr
     *            查询sql
     * @param params
     *            查询参数
     * @return Map
     * 
     */
    public  Map<String,Object> sqlQueryForMap(String sql, Map <String,Object> paramMap);
    /**
     * @param sql
     *            查询sql
     * @return 查询结果对象分页列表
     * 
     */
    public  PageInfo sqlQueryForPage(String sql, PageInfo pageInfo);


    /**
     * 
     * @param sql
     * @param pageInfo
     * @param rowMapper：每一项的构造对象
     * @return 查询结果对象分页列表
     * @author:詹保山
     */
    public <T> PageInfo sqlQueryForPage(String sql, PageInfo pageInfo,RowMapper<T> rowMapper);
    
    /**
     * 分页查询
     * @param sql
     * @param pageInfo
     * @param clazz：对应的POJO的CLASS
     * @return
     * @author:詹保山
     */
    public <T> PageInfo sqlQueryForPage(String sql, PageInfo pageInfo,Class<T> clazz);
    
    /**
     * @param sql
     *            查询sql
     * @param pageInfo
     *            分页条件
     * @return 查询结果对象分页列表
     * 
     */
    public <T> PageInfo sqlQueryForPage(String sql, Map<String, ?> params, PageInfo pageInfo);
    
    /**
     * @param sql
     *            查询sql
     * @param params
     *            查询参数
     * @param pageInfo
     *            分页条件
     * @return 查询结果对象分页列表
	 * @author:詹保山
     */
	
	public <T> PageInfo sqlQueryForPage(String sql, Map<String, ?> params, PageInfo pageInfo,RowMapper<T> rowMapper);
	
	/**
	 * 
	 * @param sql
	 * @param params
	 * @param pageInfo
	 * @param clazz 对应的POJO 的class
	 * @return
	 * @author:詹保山
	 */
	public <T> PageInfo sqlQueryForPage(String sql, Map<String, ?> params, PageInfo pageInfo,Class<T> clazz);

//    /**
//     * 执行JDBC SQL更新语句,也可以执行不需要返回值的过程
//     * 
//     * @param sql
//     *            sql
//     * @return 更新影响的记录数
//     */
//	public int executeSqlUpdate(String sql);
//    /**
//     * 执行JDBC SQL更新语句,也可以执行不需要返回值的过程
//     * 
//     * @param sql
//     *            sql
//     * @param params
//     *            参数，可以为null
//     * @return 更新影响的记录数
//     */
//	public int executeSqlUpdate(String sql, Map params);
	 /**
	  * 执行JDBC SQL更新语句,带有回调动作
	  * @param sql
	  * @param params
	  * @param action
	  * @return
	  * @author:詹保山
	  */
	public <T> T executeSqlUpdate(String sql, Map<String, ?> params,PreparedStatementCallback<T> action);
}
